package controller;

import dao.ComentarioJpaController;
import dao.ObservacaoJpaController;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import dao.exceptions.NonexistentEntityException;
import java.util.Date;
import model.Comentario;
import model.Observacao;
import pagecontroller.JsfUtil;
import pagecontroller.PageManager;

/**
 *
 * @author Edilson Fernandes da Costa
 * @version 1.0
 */
public class ObservacaoController {

    public ObservacaoController() {
        if (JsfUtil.getObjectFromSession("ObservacaoJpaController") == null) {
            jpaController = new ObservacaoJpaController();
        } else {
            jpaController = (ObservacaoJpaController) JsfUtil.getObjectFromSession("ObservacaoJpaController");
        }
    }
    private Observacao observacao = null;
    private Observacao observacaoAux = null;
    private ObservacaoJpaController jpaController = null;
    private List<Observacao> observacaos = null;


   public String persiste() {
        if (observacao.getId() == null) {
            return create();
        } else {
            return update();
        }
    }

    public String update() {
        try {
            jpaController.edit(this.observacao);
            observacaoAux = observacao;
            this.observacao = null;
            JsfUtil.addSuccessMessage("Observacao Atualizado com Sucesso");
            getPageManager().setPageObservacaoRelat();
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(ObservacaoController.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(ObservacaoController.class.getName()).log(Level.SEVERE, null, ex);
        }
        return "refreshPage";
    }

    public String create() {
        try {
            observacao.setDataCriacao(new Date());
            observacao.setPagina(getPageManager().getPagina());
            jpaController.create(observacao);
            observacaoAux = observacao;
            observacao = null;
            JsfUtil.addSuccessMessage("Observacao cadastrado com sucesso.");
            getPageManager().setPageObservacaoRelat();
            //getPageManager().setPageObservacaoCad();
            
        } catch (Exception e) {
            JsfUtil.ensureAddErrorMessage(e, "Ocorreu um erro na percistencia dos dados.");
            return null;
        }
        return "refreshPage";
    }

    public String edit() {
        Observacao observacaoTemp = (Observacao) JsfUtil.getObjectFromRequestParameter("observacaoTemp");
        this.observacao = observacaoTemp;
        return "refreshPage";
    }

    public String load() {
        observacaoAux = (Observacao) JsfUtil.getObjectFromRequestParameter("observacaoTemp");
        getPageManager().setPageObservacaoRelat();
        return "refreshPage";
    }
    public String load2() {
        observacaoAux = (Observacao) JsfUtil.getObjectFromRequestParameter("observacaoAux");
        getPageManager().setPageObservacaoRelat();
        return "refreshPage";
    }


    public String destroy() {
        Observacao observacaoTemp = (Observacao) JsfUtil.getObjectFromRequestParameter("observacao");
        try {
            jpaController.destroy(observacaoTemp.getId());
            JsfUtil.addSuccessMessage("Observacao removido com sucesso.");
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(ObservacaoController.class.getName()).log(Level.SEVERE, null, ex);
        }

        return "refreshPage";
    }


    public String editButton() {
        this.observacao = observacaoAux;
        getPageManager().setPageObservacaoCad();

        return "refreshPage";
    }

    public String destroyButton() {
        Observacao observacaoTemp = observacaoAux;
        try {
            jpaController.destroy(observacaoTemp.getId());
            JsfUtil.addSuccessMessage("Observacao removida com sucesso.");
            observacaoAux = null;

        } catch (NonexistentEntityException ex) {
            Logger.getLogger(AlunoController.class.getName()).log(Level.SEVERE, null, ex);
        }

        return "refreshPage";
    }


    private PageManager getPageManager() {
        PageManager pageManager = (PageManager) JsfUtil.getObjectFromSession("PageManager");
        return pageManager;
    }



    public Observacao getObservacao() {
        if (observacao == null) {
            observacao = new Observacao();
        }
        return observacao;
    }

    public List<Observacao> getObservacaos(){
        this.observacaos = jpaController.findObservacaoEntities();
        return this.observacaos;
    }

    public ObservacaoJpaController getJpaController() {
        return jpaController;
    }

    public Observacao getObservacaoAux() {
        return observacaoAux;
    }

    public String comentar(){
        getPageManager().setPageComentarioCad();
        return "refreshPage";
    }
    
    public List<Comentario> getComentarios(){
        return getComentarioJpaController().findComentarios(observacaoAux);
    }
    
    public int getComentariosSize(){
        return getComentarios().size();
    }
    
   public ComentarioJpaController getComentarioJpaController(){
       ComentarioJpaController jpaController = (ComentarioJpaController) JsfUtil.getObjectFromSession("ComentarioJpaController");
       if(jpaController == null){
           jpaController = new ComentarioJpaController();
       }
       
       return jpaController;
   }
   
   public String newObservacao(){
       
       
       return "refreshPage";
   }

}
